package com.bonshotels.DataLayer.Stubs;

import java.util.Date;
import java.util.Set;
import java.util.HashSet;

import com.bonshotels.DomainLayer.CtrlDades.ICtrlHabitacio;
import com.bonshotels.DomainLayer.DomainModel.Client;
import com.bonshotels.DomainLayer.DomainModel.Habitacio;
import com.bonshotels.DomainLayer.DomainModel.Reserva;
import com.bonshotels.DomainLayer.DomainModel.TipusHabitacio;
import com.bonshotels.Excepcions.ClientNoExisteix;
import com.bonshotels.Excepcions.HabitacioNoExisteix;

public class CtrlHabitacioHSQLDB implements ICtrlHabitacio {

	private TipusHabitacio tipus1 = new TipusHabitacio();
	private TipusHabitacio tipus2 = new TipusHabitacio();
	
	public CtrlHabitacioHSQLDB() {
		tipus1.setNom("Suit reial");
		tipus1.setCapacitat(6);
		tipus1.setDescripcio("Si ets pobre, millor ni miris.");
		tipus2.setNom("Habitacio doble");
		tipus2.setCapacitat(2);
		tipus2.setDescripcio("Si ets ric, millor ni miris.");
	}
	
	@Override
	public Habitacio obte(int numHabitacio, String hotel) throws HabitacioNoExisteix {
		if(hotel.compareToIgnoreCase("Princess") == 0) {
			if(numHabitacio == 1) {
				Habitacio h = new Habitacio();
				h.setNumero(1);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);
				return h;
			} else if (numHabitacio == 2) {
				Habitacio h = new Habitacio();
				h.setNumero(2);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);	
				return h;
			} else if (numHabitacio == 3) {
				Habitacio h = new Habitacio();
				h.setNumero(3);
				h.setTipusHabitacio(tipus2);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);
				return h;
			}
		} else if(hotel.compareToIgnoreCase("Juan Carlos") == 0) {
			if(numHabitacio == 1) {
				Habitacio h = new Habitacio();
				h.setNumero(1);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);
				return h;
			} else if (numHabitacio == 2) {
				Habitacio h = new Habitacio();
				h.setNumero(2);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);	
				return h;
			} else if (numHabitacio == 3) {
				Habitacio h = new Habitacio();
				h.setNumero(3);
				h.setTipusHabitacio(tipus2);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);	
				return h;
			}			
		} else if(hotel.compareToIgnoreCase("Migdia") == 0) {
			if(numHabitacio == 1) {
				Habitacio h = new Habitacio();
				h.setNumero(1);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				CtrlClientHSQLDB cc = new CtrlClientHSQLDB();
				Client c = null;
				try {
					c = cc.obte("dni1");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				Reserva r = new Reserva(h, c, new Date(1322823600), new Date(1323514800), 20);
				reserves.add(r);
				try {
					c = cc.obte("dni2");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				r = new Reserva(h, c, new Date(1323514800), new Date(1323601200), 20);
				reserves.add(r);
				h.setReserva(reserves);
				return h;
			} else if (numHabitacio == 2) {
				Habitacio h = new Habitacio();
				h.setNumero(2);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				CtrlClientHSQLDB cc = new CtrlClientHSQLDB();
				Client c = null;
				try {
					c = cc.obte("dni1");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				Reserva r = new Reserva(h, c, new Date(1322910000), new Date(1323601200), 20);
				reserves.add(r);
				h.setReserva(reserves);
				return h;				
			} else if (numHabitacio == 3) {
				Habitacio h = new Habitacio();
				h.setNumero(3);
				h.setTipusHabitacio(tipus2);
				Set<Reserva> reserves = new HashSet<Reserva>();
				CtrlClientHSQLDB cc = new CtrlClientHSQLDB();
				Client c = null;
				try {
					c = cc.obte("dni1");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				Reserva r = new Reserva(h, c, new Date(1324378800), new Date(1325242800), 20);
				reserves.add(r);
				h.setReserva(reserves);
				return h;					
			}			
		} else if(hotel.compareToIgnoreCase("Aprovarem") == 0) {
			if(numHabitacio == 1) {
				Habitacio h = new Habitacio();
				h.setNumero(1);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				CtrlClientHSQLDB cc = new CtrlClientHSQLDB();
				Client c = null;
				try {
					c = cc.obte("dni1");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				Reserva r = new Reserva(h, c, new Date(1324465200), new Date(1325329200), 20);
				reserves.add(r);
				h.setReserva(reserves);
				return h;	
			} else if (numHabitacio == 2) {
				Habitacio h = new Habitacio();
				h.setNumero(2);
				h.setTipusHabitacio(tipus1);
				Set<Reserva> reserves = new HashSet<Reserva>();
				CtrlClientHSQLDB cc = new CtrlClientHSQLDB();
				Client c = null;
				try {
					c = cc.obte("dni3");
				} catch (ClientNoExisteix e) {
					e.printStackTrace();
				}
				Reserva r = new Reserva(h, c, new Date(1322823600), new Date(1323514800), 20);
				reserves.add(r);
				h.setReserva(reserves);
				return h;					
			} else if (numHabitacio == 3) {
				Habitacio h = new Habitacio();
				h.setNumero(3);
				h.setTipusHabitacio(tipus2);
				Set<Reserva> reserves = new HashSet<Reserva>();
				h.setReserva(reserves);
				return h;					
			}			
		}
		throw new HabitacioNoExisteix();
	}


	@Override
	public boolean existeix(int numHabitacio, String hotel) {
		return false;
	}

	@Override
	public Set<Habitacio> obteTots() {
		return null;
	}
	
}